/* Copyright (c) 2004-2024 Peigen.info. All rights reserved. */

package info.peigen.hotpot.component.gateway.dianlan.protocol.passive;

import info.peigen.hotpot.component.gateway.dianlan.facade.enums.DianlanBatteryPackStatus;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import lombok.experimental.SuperBuilder;

/**
 * <b>(DianlanBatteryPackStatusInfo)</b>
 * <p>
 * 单体电池状态信息
 * <pre>
 * 位置（字节/位）         参数定义                参数说明                                                备注
 * 2-1                  总电压             16bit，0.1V/bit，偏移量： 0，范围： 0V~1000V                  0xFFFF无效
 * 4-3                  总电流             16bit，0.05A/bit，偏移量：-1200A，范围： -1200A ~ 1200A       0xFFFF无效
 * 5                    电池容量SOC         8bit，0.4%/bit，偏移量：0，范围： 0~100%                     0xFF无效
 * 6.8-6.5              系统状态            4bit，1/bit，偏移量：0，0000上电、0110自动唤醒状态、1000可用、1100充电、1010插枪未充电	电池管理系统状态0000、0110、1000、1100、1010共五种状态有
 * 6.3-6.3              预留
 * 6.2-6.1              预留
 * 7                    CNT计数            报文发送次数统计                                             0~255循环发送
 * 8.8-8.7              故障等级            00：无故障；01：一级故障；10：二级故障；11：无效；
 * 8.6-8.1              故障代码            00：无故障；01-63：见故障码说明
 * </pre>
 *
 * @author LiDaHai
 * @version 1.0.0
 * @since 2023/1/12
 */
@SuperBuilder
@Data
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@Accessors(chain = true)
public class DianlanBatteryPackStatusInfo {
    /** 总电压,单位V */
    // TODO 错误值：5224.8 ， 正确值：644
    Double                   batteryPackTotalVoltage;
    /** 总电流,单位A */
    // TODO 错误值：1287.8 ， 正确值：36.6
    Double                   batteryPackTotalCurrent;
    /** 电池容量SOC */
    Double                   batteryPackCapacitySOC;
    /** 系统状态 */
    DianlanBatteryPackStatus batteryPackStatus;
    /** CNT计数 */
    Integer                  batteryPackCntCount;
    /** 故障等级 */
    String                   batteryPackFaultLevel;
    /** 故障代码 */
    String                   batteryPackFaultCode;
    /** 预留6.1 */
    String                   reserve1;
    /** 预留6.2 */
    String                   reserve2;

    public String toString() {
        return "总电压：" + batteryPackTotalVoltage + "V" + "，" +
                "总电流：" + batteryPackTotalCurrent + "A" + "，" +
                "电池容量SOC：" + batteryPackCapacitySOC + "%" + "，" +
                "电池状态：" + batteryPackStatus.getMessage() + "，" +
                "CNT计数：" + batteryPackCntCount + "，" +
                "故障等级" + batteryPackFaultLevel + "，" +
                "故障代码" + batteryPackFaultCode;
    }
}